<?php
namespace app\admin\logic;

use app\admin\controller\Admin;

use think\Request;

class File
{

    /**
     * base64转图片
     *
     * @param integer $adminId
     * @return json
     */
    public function base64ToImg($adminId)
    {
        $post = request()->only(['base_data'], 'post');
        $request = $post['base_data'];
        $request = str_replace('data:image/jpeg;base64,', '', $request);
        $request = str_replace('data:image/jpg;base64,', '', $request);
        $request = str_replace('data:image/png;base64,', '', $request);
        $request = str_replace('data:image/gif;base64,', '', $request);
        
        $str = base64_decode($request);
        $info = getimagesizefromstring($str);
        
        if ( ! $info) {
            err('解码失败');
        }
        
        switch ($info['mime']) {
            case 'image/png':
                $ext = '.png';
                break;
            case 'image/jpeg':
                $ext = '.jpg';
                break;
            case 'image/gif':
                $ext = '.gif';
                break;
            case 'image/pjpeg':
                $ext = '.jpg';
                break;
        }
        
        $uploads = 'uploads' . DS . $adminId . DS . 'user' . DS;
        $name = uniqid() . "$ext";
        
        $res = file_put_contents(ROOT_PATH . 'public' . DS . $uploads . $name, $str); //返回的是字节数
        $path = $uploads . $name;
        suc('success', ['img'=>$path]);
    }

    /**
     * 上传文件到腾讯cos
     *
     * @param integer $admin_id 目录名称 - 用客户ID做目录名称
     * @param string $bucket 腾讯cos bucket名称
     * @param string $size 上传文件大小默认为500KB
     */
    public function uploadImgToTencentCos($info)
    {
        require_once VENDOR_PATH . 'TencentCosSdk/include.php';
        
        $info = ['admin_id'=>1299, 'size'=>550000, 'bucket'=>'image'];
        $data = $this->upload($info);
        //$a = file_get_contents($src);
        

        Cosapi::setTimeout(180);
        
        // 设置COS所在的区域，cd - 西南
        Cosapi::setRegion('cd');
        
        // Create folder in bucket.
        $res_folder = Cosapi::createFolder($data['bucket'], $data['folder']);
        
        // Upload file into bucket.
        $res_upload = Cosapi::upload($data['bucket'], $data['src'], $data['dst']);
        
        if ($res_upload['code'] != 0) {
            err('upload fail', $res_upload);
        }
        
        suc('success', $res_upload);
    }

    /**
     * 验证上传的文件，返回腾讯cos需要的参数
     *
     * @param integer $admin_id 目录名称 - 用客户ID做目录名称
     * @param string $bucket 腾讯cos bucket名称
     * @param string $size 上传文件大小默认为500KB
     */
    private function upload($info)
    {
        $files = $_FILES;
        $file = $files['image'];
        
        // 允许的格式
        $allow = ['jpeg', 'jpg', 'png', 'gif', 'txt', 'sql'];
        
        if (empty($file['type'])) {
            err('image incorrect format!');
        }
        
        $type = explode('/', $file['type']);
        
        if ( ! in_array($type[1], $allow)) {
            err('image incorrect format!');
        }
        
        if ($file['size'] > $info['size']) {
            err('图片不能大于500KB');
        }
        
        $data = [];
        $admin_id = $info['admin_id']; // $this->accessData['admin_id'];
        $data['bucket'] = $info['bucket']; // bucket名称
        $data['src'] = $file['tmp_name']; // 本地要上传文件的全路径
        $data['dst'] = '/' . $admin_id . '/' . uniqid() . mt_rand(100, 999) . '.' . $type[1]; // 文件在COS服务端的全路径
        $data['folder'] = '/' . $admin_id; // 目录名称 - 用客户ID做目录名称
        return $data;
    }

    /**
     * 上传图片、视频、音频、Word、Excel等格式的文件(每次一张)
     *
     * @param integer $admin_id 客户ID
     * @param integer $size 限制上传文件的大小
     * @param integer $imgWidth 图片宽度
     * @param integer $imgHeight 图片高度
     * @return json
     */
    public function uploadFileAdmin($admin_id, $size = 300000, $imgWidth = 600, $imgHeight = 600,$file='file')
    {
        // 获取表单上传文件
        $file = request()->file($file);
        if (empty($file)) {
            return false;
        }

        $fileInfo = $file->getInfo();
        $type = explode('/', $fileInfo['type']); // image/png
        $ext = 'jpg,jpeg,png,gif,mp4,mp3,silk,doc,xls'; // 文件格式
        $info = $file->check(['size'=>$size, 'ext'=>$ext]);
        
        if ( ! $info) {
            return false;
            //return $file->getError();
        }
        
        // 命名方式 - uploads/客户ID/user(或者admin)/YYYYMMDD/xx.jpg
        $path = 'uploads' . DS . $admin_id . DS . 'admin';


        // 图片处理 - 如果是图片设置图片尺寸 - 默认为 600 * 600，这样的尺寸在手机端显示就OK
        if ($type[0] == 'image') {
            // 创建日期目录 
            $path = 'uploads' . DS . $admin_id . DS . 'admin' . DS . date('Ymd');

            @mkdir($path, 0777, true);
            $pathFileName = $path . DS . uniqid() . '.' . $type[1];
            $img = \think\Image::open($fileInfo['tmp_name']);
            $img->thumb($imgWidth, $imgHeight)->save($pathFileName);
            return $pathFileName;
        }
        
        // 移动到框架应用根目录/public/uploads/ 目录下
        $info = $file->move(ROOT_PATH . 'public' . DS . $path);
        
        return $path . DS . $info->getSaveName();
    } 

    /**
    * 上传图片、视频、音频、Word、Excel等格式的文件(每次一张) (全路径上传，含域名)
    *
    * @param integer $admin_id 客户ID
    * @param integer $size 限制上传文件的大小
    * @param integer $imgWidth 图片宽度
    * @param integer $imgHeight 图片高度
    * @return json
    */
    public function uploadFileAdminPro($admin_id, $size = 30000000, $imgWidth = 600, $imgHeight = 600,$file='file')
    {
        // 获取表单上传文件
        $file = request()->file($file);

        if (empty($file)) {
            return false;
        }
        $fileInfo = $file->getInfo();
        $type = explode('/', $fileInfo['type']); // image/png
        $ext = 'jpg,jpeg,png,gif,mp4,mp3,silk,doc,xls,pdf'; // 文件格式
        $info = $file->check(['size'=>$size, 'ext'=>$ext]);
        
        if ( ! $info) {
            return false;
            //return $file->getError();
        }
        
        // 命名方式 - uploads/客户ID/user(或者admin)/YYYYMMDD/xx.jpg
        $path = 'uploads' . DS . $admin_id . DS . 'admin';
        
        // 图片处理 - 如果是图片设置图片尺寸 - 默认为 600 * 600，这样的尺寸在手机端显示就OK
        if ($type[0] == 'image') {
            // 创建日期目录 
            $path = 'uploads' . DS . $admin_id . DS . 'admin' . DS . date('Ymd');
            @mkdir($path, 0777, true);
            $pathFileName = $path . DS . uniqid() . '.' . $type[1];
            $img = \think\Image::open($fileInfo['tmp_name']);
            $img->thumb($imgWidth, $imgHeight)->save($pathFileName);
            return $pathFileName;
        }
        
        // 移动到框架应用根目录/public/uploads/ 目录下
        $info = $file->move(ROOT_PATH . 'public' . DS . $path);
        
        return $path . DS . $info->getSaveName();
    }

    /**
     * 上传图片、视频、音频、Word、Excel等格式的文件(每次多张)
     *
     * @param integer $admin_id 客户ID
     * @param integer $size 限制上传文件的大小
     * @param integer $imgWidth 图片宽度
     * @param integer $imgHeight 图片高度
     * @return json
     */
    public function uploadMoreFileAdmin($admin_id, $size = 300000, $imgWidth = 600, $imgHeight = 600)
    {
        // 获取表单上传文件
        $files = request()->file('file');
        
        if (empty($files)) {
            return false;
        }
        
        $result = [];
        $ext = 'jpg,jpeg,png,gif,mp4,mp3,silk,doc,xls'; // 文件格式

        foreach ($files as $file) {
            $fileInfo = $file->getInfo();
            $type = explode('/', $fileInfo['type']); // image/png
            $info = $file->check(['size'=>$size, 'ext'=>$ext]);
            
            if ( ! $info) {
                return $file->getError();
            }
            
            // 命名方式 - uploads/客户ID/user(或者admin)/YYYYMMDD/xx.jpg
            $path = 'uploads' . DS . $admin_id . DS . 'admin';
            
            // 图片处理 - 如果是图片设置图片尺寸 - 默认为 600 * 600，这样的尺寸在手机端显示就OK
            if ($type[0] == 'image') {
                // 创建日期目录
                $path = 'uploads' . DS . $admin_id . DS . 'admin' . DS . date('Ymd');
                @mkdir($path, 0777, true);
                $pathFileName = $path . DS . uniqid() . '.' . $type[1];
                $img = \think\Image::open($fileInfo['tmp_name']);
                $img->thumb($imgWidth, $imgHeight)->save($pathFileName);
                $result[] = $pathFileName;
            }
            
            // 移动到框架应用根目录/public/uploads/ 目录下
            $info = $file->move(ROOT_PATH . 'public' . DS . $path);
            
            $result[] = $path . DS . $info->getSaveName();
        }
        
        return $result;
    }
    
    
    
    /**
     * 阿里云OSS 图片文件上传每次一张
     *
     * @param integer $admin_id 客户ID
     * @param integer $size 限制上传文件的大小
     * @param integer $imgWidth 图片宽度
     * @param integer $imgHeight 图片高度
     * @return json
     */
    public function uploadFileOss($admin_id, $size = 300000, $imgWidth = 600, $imgHeight = 600,$file='file')
    {
        // 获取表单上传文件
        $file = request()->file($file);
        if (empty($file)) {
            return false;
        }
    
        $fileInfo = $file->getInfo();
        $type = explode('/', $fileInfo['type']); // image/png

        $ext = 'jpg,jpeg,png,gif,mp4,mp3,silk,doc,xls'; // 文件格式
        $info = $file->check(['size'=>$size, 'ext'=>$ext]);
    
        if ( ! $info) {
            return false;
        }

        // 命名方式 - uploads/客户ID/user(或者admin)/YYYYMMDD/xx.jpg
        $path = 'uploads' . DS . $admin_id . DS . 'admin'. DS . date('Ymd');

        // 移动到框架应用根目录/public/uploads/ 目录下
        $info = $file->move(ROOT_PATH . 'public' . DS . $path);
    
        $image = $path . DS . 'png';
        
        $pathoss = 'images'.DS.'sndzz'.$info->getSaveName();
        
        $oss = New \app\admin\controller\Base();
        
        $ossimg = $oss->ossUpload($image,$pathoss,'sndzz');

        return $pathoss;
    }
    
    /**
     * 图片上传
     * @AuthorHTL liuren
     * @DateTime  2017-09-19T16:43:28+0800
     * @return    [type]                   [description]
     */
    public function uploadoss($admin_id)
    {
         
        $request = Request::instance();
        $param = $request->param();
        $file = $request->file('file');
    
        
        if ( empty($file) ) {
            return false;
        }

        
        // 命名方式 - uploads/客户ID/user(或者admin)/YYYYMMDD/xx.jpg
        $path = 'uploads' . DS . $admin_id . DS . 'admin';
        
        $file_info = $file->move(ROOT_PATH .'public' . DS . $path);

        //本地临时目录
        $tmp_name  = $file_info->getInfo()['type'];
        //文件名
        $fileName  = $file_info->getFileName();
        $filedataname = explode(DS, $file_info->getSaveName())[0];
    
    
        //执行上传至阿里云oss
        $content = file_get_contents($file_info->getPathName());

        $oss = New \app\admin\controller\Base();
        
        $upload_alioss = $oss->ossUpload($path.'/'.$fileName,$content,'sndzz');

        $str = $upload_alioss['info']['url'];
        
        //整合代码路径
        $stra = str_replace("http://sndzz.oss-cn-shanghai.aliyuncs.com/","",$str);
        $img = $path . DS .$file_info->getSaveName();
    
        if ($file_info) {
            return $stra;	
        }else{ 
           return false;
        }

    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
}